
" 引用bundle 配置文件
source ~/.vim/bundle.vim
" 引用自己的函数。
source ~/.vim/vim.local

" 设置文件编码字符集
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
" 设置文件format
"set fileformat=unix
" 屏幕显示的编码
" http://edyfox.codecarver.org/html/vim_fileencodings_detection.html
let &termencoding=&encoding

" 关闭兼容模式
" 兼容模式 让 vim 关闭所有扩展的功能，尽量模拟vi的行为。但这样就不应用vim的很多
" 强大功能，所以一般没有什么特殊需要的话，关闭兼容模式。由于这个选项是最基础的选
" 项，会连带很多其它选项发生变动（称作副作用），所以它必需是第一个设定的选项。
set nocompatible   " 简写 set nocp
" 取消备份文件和交换文件
set nobackup
set nowritebackup
set noswapfile

" 设置leader键
let mapleader=';'
"由于安装的vim-go版本要求vim版本比较高,取消其警告提示
let g:go_version_warning = 0


" 语法高亮
" The ":syntax enable" command will keep your current color settings.  This
" allows using ":highlight" commands to set your preferred colors before or
" after using this command.  If you want Vim to overrule your settings with the
" defaults, use: "syntax on"
syntax on
if !exists("g:syntax_on")
	syntax enable
endif
"set highlight


" 设置高亮样式
au WinLeave * set nocursorline nocursorcolumn
au WinEnter * set cursorline cursorcolumn
set cursorline cursorcolumn
hi cursorcolumn ctermbg=darkblue  cterm=NONE

" 设置自动与系统剪贴板交互，ubuntu有两个系统剪贴板
" 详细见笔记或参考链接:
" https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim
" https://stackoverflow.com/questions/6453595/prevent-vim-from-clearing-the-clipboard-on-exit
"set clipboard=unnamed      " Set it to unnamed to use * (PRIMARY, on select)
"set clipboard=unnamedplus  " Set it to unnamedplus to use + (CLIPBOARD, ^C)
"set clipboard=autoselect
" 注：* 寄存器是选中即复制， + 寄存器需要 "+y 指定复制
" 设置 vim  退出时自动将 * + 寄存器内容拷贝到系统
" 需要安装 “xsel” 或 “xclip” 剪贴板管理器
" 由于vim下，* + 寄存器即对应的是系统的两个剪贴板，所以这个功能不再需要。在 tmux
" 下可能需要将 tmux buffer 拷贝到系统剪贴板
" 另外，需要实现 linux 和 windows 之前共享剪贴板，则需要 xserver 功能。可借助
" ssh 工具，例如 moberxterm, secureCRT等，可参考：
" https://www.cnblogs.com/vastiny/p/4234735.html
" https://www.bbsmax.com/A/MAzA2QKOJ9/
" https://zhuanlan.zhihu.com/p/38477934
"
if executable("xclip")

  function! PreserveClipboard_xclip()
    call system('echo ' . shellescape(getreg('+')) .  ' | xclip -selection clipboard')
    call system('echo ' . shellescape(getreg('*')) .  ' | xclip -selection primary')
  endfunction

 " autocmd VimLeave * call  PreserveClipboard_xclip()
elseif executable("nousexsel")

  function! PreserveClipboard_xsel()
    call system("xsel -ib", getreg('+'))
    call system("xsel -ip", getreg('*'))
  endfunction

  " autocmd VimLeave * call PreserveClipboard_xsel()
endif

" 用ctrl+c 复制
vmap <C-C> "+y
map Q <Nop>
" 使用vim时，如果你不小心按了 Ctrl + s 后，你会发现不能输入任何东西了，
" 像死掉了一般，其实vim并没有死掉，这时vim只是停止向终端输出而已，
" 要想退出这种状态，只需按Ctrl + q 即可恢复正常。
" 屏蔽掉 Ctrl + s 响应, 需要修改 ~/.bashrc, 添加以下内容
" stty -ixon  "本机配置修改 ~/.bash_loacl


" 为了解决粘贴时出现 "~0 1~" 字符的问题
set t_BE=


"--------
" Vim UI
"--------
" color scheme

" solarized theme
"let g:solarized_termcolors=256
"colorscheme solarized


if has('gui_running')
	set background=dark
	colorscheme solarized
else
	let g:molokai_original = 1
	colorscheme molokai
endif


set background=dark "dark light


" When editing a file, always jump to the last cursor position
autocmd BufReadPost *
      \ if ! exists("g:leave_my_cursor_position_alone") |
      \     if line("'\"") > 0 && line ("'\"") <= line("$") |
      \         exe "normal g'\"" |
      \     endif |
      \ endif

" 输入搜索内容时就显示搜索结果.
set incsearch
" 在搜索时忽略大小写
set ignorecase
" 如果你采用的模式里至少有一个大写字母，查找就成了大小写敏感的。可以这样理解，你
" 不必键入大写字母，也能查找到含有大写字母的词，所以，你若键入大写字母，必然是因
" 为你要大小写敏感的匹配。
set smartcase

" 记录历史的行数
set history=1000
" 文件自动检测外部更改
set autoread
" 关闭开启时默认折叠命令
set nofoldenable                                                  " disable folding"
" 在处理未保存或只读文件的时候，弹出确认
set confirm                                                       " prompt when existing from an unsaved file
" 设置backspace有几种工作方式，默认是vi兼容的。
" indent: 如果用了":set indent,:set ai" 等自动缩进，
" 想用退格键将字段缩进的删掉，必须设置这个选项。否则不响应。
" eol:如果插入模式下在行开头，想通过退格键合并两行，需要设置eol。
" start：要想删除此次插入前的输入，需设置这个。
set backspace=indent,eol,start                                    " More powerful backspacing
" 打开256色模式。参考：https://www.bbsmax.com/A/l1dyN140ze/
set t_Co=256                                                      " Explicitly tell vim that the terminal has 256 colors "
" 设置鼠标模式
" 设置鼠标模式后，选中行由vim处理，例如选中行拷贝到服务器剪切板，必须由
" Xserver同步到本地主机
" 不设置鼠标模式，
" 选中行由终端工具Mobarxterm处理,因此直接粘贴到本地，但同时会粘贴vim行号
set mouse=a                                                       " use mouse in all modes
"set mouse=                                                        "
" 当我们删除或是修改了一些行的文本,如果这些行数超出了report所指定的行数，
" Vim就会告诉这一些情况.所以如果我们要Vim报告所有的变化,我们可以将其设为0，
" 如果我们不希望Vim来告诉我们这些变化,我们可以将这个值设成一个相当大的值就可了。
set report=0                                                      " always report number of lines changed                "
" 不自动换行
set nowrap                                                        " dont wrap lines
" 设定光标离窗口上下边界 5 行时窗口自动滚动
set scrolloff=5                                                   " 5 lines above/below cursor when scrolling
" 设置匹配模式，显示匹配的括号
set showmatch                                                     " show matching bracket (briefly jump)
" 命令行显示输入的命令
set showcmd                                                       " show typed command in status bar
" ??????????????????????????????
set title                                                         " show file in titlebar
" 匹配括号高亮的时间(单位是十分之一秒)
set matchtime=2                                                   " show matching bracket for 0.2 seconds
" 应该是添加匹配的括号，不太确定。
set matchpairs+=<:>
" 使vsplit新缓冲区位于当前缓冲区的右侧
set splitright
" 使split新缓冲区位于当前缓冲区之下
"set splitbelow


" 显示行号
set number                                                        " show line numbers
" 行号宽度
set numberwidth=5
" 相对行号: 行号变成相对，可以用 nj/nk 进行跳转,n 为数字
set relativenumber number

function! NumberToggle()
  if(&number == 1)
    set norelativenumber nonumber
  else
    set relativenumber number
  endif
endfunc

function! SetRelativeNumber()
  if(&number == 1)
    set relativenumber
  endif
endfunc

function! SetNoRelativeNumber()
  if(&number == 1)
    set norelativenumber
  endif
endfunc

" 插入模式下用绝对行号, 普通模式下用相对
autocmd InsertEnter * call SetNoRelativeNumber()
autocmd InsertLeave * call SetRelativeNumber()
au FocusLost * call SetNoRelativeNumber()
au FocusGained * call SetRelativeNumber()

function! RelativeNumberToggle()
  if (&relativenumber == 1)
    call SetNoRelativeNumber()
  else
    call SetRelativeNumber()
  endif
endfunc

" 分屏窗口/最大化
function! Zoom ()
    " check if is the zoomed state (tabnumber > 1 && window == 1)
    if tabpagenr('$') > 1 && tabpagewinnr(tabpagenr(), '$') == 1
        let l:cur_winview = winsaveview()
        let l:cur_bufname = bufname('')
        tabclose

        " restore the view
        if l:cur_bufname == bufname('')
            call winrestview(cur_winview)
        endif
    else
        tab split
    endif
endfunction

nmap <leader>z :call Zoom()<CR>

" 配置状态行；
" 显示标尺，就是在右下角显示光标位置
set ruler
" laststatus 0: 不显式状态行 1: 仅当窗口多于一个时，显示状态行 2: 总是显式状态行
set laststatus=2
"%(...%)	定义一个项目组。
"%{n}*	%对其余的行使用高亮显示组Usern，直到另一个%n*。数字n必须从1到9。用%*或%0*可以恢复正常的高亮显示。
"%<	如果状态行过长，在何处换行。缺省是在开头。
"%=	左对齐和右对齐项目之间的分割点。
"%	字符%
"%B	光标下字符的十六进制形式
"%F	缓冲区的文件完整路径
"%H	如果为帮助缓冲区则显示为HLP
"%L	缓冲区中的行数
"%M	如果缓冲区修改过则显示为+
"%N	打印机页号
"%O	以十六进制方式显示文件中的字符偏移
"%P	文件中光标前的%
"%R	如果缓冲区只读则为RO
"%V	列数。如果与%c相同则为空字符串
"%W	如果窗口为预览窗口则为PRV
"%Y	缓冲区的文件类型，如vim
"%a	如果编辑多行文本，这个字行串就是({current} of {arguments})，例如：(5 of 18)。如果在命令行中只有一行，这个字符串为空
"%b	光标下的字符的十进制表示形式
"%c	列号
"%f	缓冲区的文件路径
"%h	如果为帮助缓冲区显示为[Help]
"%l	行号
"%m	如果缓冲区已修改则表示为[+]
"%n	缓冲区号
"%o	在光标前的字符数（包括光标下的字符）
"%p	文件中所在行的百分比
"%r	如果缓冲区为只读则表示为[RO]
"%t	文件名(无路径)
"%v	虚列号
"%w	如果为预览窗口则显示为[Preview]
"%y	缓冲区的文件类型，如[vim]
"%{expr}	表达式的结果
" 参考链接：https://blog.csdn.net/strategycn/article/details/7620261
" 配置参考：https://blog.csdn.net/icbm/article/details/73028623
" 由于powerline 会覆盖这个设置，因此将powerline在bundle.vim中屏蔽了，不使用；
" 于是，参考上述两个配置，自己写了一个配置单。由于长度的原因，分成几个部分,如下:
"
" 显示paste模式。paste模式下显示PASTE,否者留空
set statusline=%{(&paste)?'PASTE':''}
"set statusline+=%h
" 显示基本信息，[缓冲区号] 修改 只读
set statusline+=[SN:%n]%m%r
" 如果状态栏过长，从此处截断
set statusline+=%<
" 显示路径信息和文件类型
set statusline+=\ [(%Y)%f]
" 显示文件编码和风格 encoding=utf-8  style=unix
set statusline+=\ [%{\"\".(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\"+\":\"\").\"\"}]\ [%{&ff}]
" 插入左对齐 右对齐间隔
set statusline+=%=
" 该设置需要echoFunc插件，没有该插件可以屏蔽
"set statusline+=\ [%{EchoFuncGetStatusLine()}]
set statusline+=\ [%b,0x%B]\ [%02l,%02v]\ [%L,%p%%]

" sublime key bindings
nmap <D-]> >>
nmap <D-[> <<
vmap <D-[> <gv
vmap <D-]> >gv


" w!! to sudo & write a file
cmap w!! w !sudo tee >/dev/null %


"------------------
" Useful Functions
"------------------
" easier navigation between split windows
nnoremap <c-j> <c-w>j
nnoremap <c-k> <c-w>k
nnoremap <c-h> <c-w>h
nnoremap <c-l> <c-w>l


" Keybindings for plugin toggle
nnoremap <F2> :set invpaste paste?<CR>
nnoremap <F3> :call NumberToggle()<CR>
nnoremap <F4> :call RelativeNumberToggle()<CR>
"nmap <F3> :GundoToggle<cr>
"nmap <F4> :IndentGuidesToggle<cr>
"

" Default Indentation
" 打开自动缩进
" 在此之后，如果在一行的开头输入空格或制表符，那么后续的新行将会缩进到相同的位置。
" 参考：http://www.codebye.com/linux-vi-editor-set-autoindent.html
" https://blog.csdn.net/langxianwenye/article/details/17223807
set autoindent
" 把每级缩进设置为四个空格
set shiftwidth=8    " indent width
" 启用smart缩进，在这种缩进模式中，每一行都和前一行有相同的缩进量，
" 同时这种缩进形式能正确的识别出花括号，当遇到右花括号（}），则取消缩进形式。
" 此外还增加了识别C语言关键字的功能。如果一行是以#开头的，那么这种格式将会被特殊对待而不采用缩进格式。
set smartindent     " indent when
" 指定tab缩进的字符数目
set tabstop=8       " tab width
" shiftwidth和tabstop不一样的话，你会发现程序比较难看的。
" 这时候，softtabstop就起作用了。可以从vim的说明中看到，一旦设置了softtabstop的值时，
" 你按下tab键，插入的是空格和tab制表符的混合，具体如何混合取决于你设定的。
set softtabstop=8   " backspace
" 在行和段开始处使用制表符。解决 shiftwidth 和 tabstop 不等时的麻烦，
" 在行首输入 tab 时插入宽度为 shiftwidth的空白，在其他地方按 tabstop 和 softtabstop 处理
set smarttab
" 输入 tab 时自动将其转化为空格
" set expandtab       " expand tab to space
"set noexpandtab       " expand tab to space
" 文本宽度，结合colorcolumn可以画一条竖线
set textwidth=80
" 可以使用textwidth+1的方式，也可以指定行，甚至可以设置为多列，比如 set colorcolumn=81,101
set colorcolumn=+1

" 启用文件类型匹配
filetype plugin indent on
" 根据文件类型，设置缩进
autocmd FileType php setlocal tabstop=2 shiftwidth=2 softtabstop=2 textwidth=120
autocmd FileType ruby setlocal tabstop=2 shiftwidth=2 softtabstop=2 textwidth=120
autocmd FileType php setlocal tabstop=4 shiftwidth=4 softtabstop=4 textwidth=120
autocmd FileType coffee,javascript setlocal tabstop=2 shiftwidth=2 softtabstop=2 textwidth=120
autocmd FileType python setlocal tabstop=4 shiftwidth=4 softtabstop=4 textwidth=120
autocmd FileType html,htmldjango,xhtml,haml setlocal tabstop=2 shiftwidth=2 softtabstop=2 textwidth=0
autocmd FileType sass,scss,css setlocal tabstop=2 shiftwidth=2 softtabstop=2 textwidth=120
"autocmd FileType txt setlocal tabstop=8 shiftwidth=4 softtabstop=4 textwidth=120
" syntax support
autocmd Syntax javascript set syntax=jquery   " JQuery syntax support



" 设置显示空白字符
set list
set listchars=tab:»·,trail:~
"set listchars=eol:↓,tab:->
"set listchars=eol:↓,tab:→→

" 带有如下符号的单词不要被换行分割
set iskeyword+=_ " 带有如下符号的单词不要被换行分割
"set iskeyword+=_,$,@,%,#,-  " 带有如下符号的单词不要被换行分割

" 启用高亮
set hlsearch
map <F9> :set nohlsearch<CR><CR>
" 当输入查找命令时，再启用高亮
noremap n :set hlsearch<cr>n
noremap N :set hlsearch<cr>N
noremap / :set hlsearch<cr>/
noremap * :set hlsearch<cr>*

" 全选快捷键映射为Ctrl+A
" 注：Ctrl+a默认操作是区域中数值加1，Ctrl+x是区域中数值减1
" 参考：https://blog.csdn.net/wzb56_earl/article/details/24653803
" map <C-A> ggVG
" 使用indent (V2.2.11) 对选中的区域代码格式化
" 参数来源于Lindent脚本，参考https://www.cnblogs.com/sky-heaven/p/9012508.html
map <F10> :!indent -npro -kr -i8 -ts8 -sob -l150 -ss -ncs -cp1 -il0  2>/dev/null<CR>G

" Quickly edit/reload the vimrc file
"nmap <silent> <leader>ev :e $MYVIMRC<CR>
"nmap <silent> <leader>sv :so $MYVIMRC<CR>

" eggcache vim
nnoremap ; :
:command W w
:command WQ wq
:command Wq w
:command Q q
:command Qa qa
:command QA qa

"=============== nead bin start  ====================
" -- ctags --
" 此功能需要ctags支持，请运行 sudo apt-get install ctags 安装
" 设置tags文件查找路径，当前路径，及所有的父路径
set tags=tags,../tags;
"set tags=tags,../tags,./*/tags;
nnoremap <c-p> <c-t>

" --  cscope --
"  此功能需要cscope支持，请运行 sudo apt-get install cscope 安装
"  个人习惯：ctags 文件用来查找定义，cscope 用来查找调用
if has("cscope")
    set csprg='/usr/bin/cscope' " cscope 命令路径
    set cst   " 使支持用 Ctrl+]  和 Ctrl+t 快捷键在代码间跳来跳去
    " check cscope for definition of a symbol before checking ctags:
    " set to 1 if you want the reverse search order.
    set csto=1  "default: 0: first search cscope; or 1 : first search ctags."
	" 添加数据库不显示信息；此处临时屏蔽提示，下文会打开提示
    set nocscopeverbose
	" 设置跳转提示的个数
    set cspc=5
    " add any cscope database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
    " else add the database pointed to by environment variable
    elseif $CSCOPE_DB !=""
        cs add $CSCOPE_DB
    endif
    " show msg when any other cscope db added
    "set cscopeverbose

"   设置查找的快捷键，ctrl + [ + s/g/c/t/e/f/i/d 可以查找光标所在的关键字
"   需要有数据库，数据库的生成自行百度，最好使用绝对路劲。
    nmap <C-[>s :cs find s <C-R>=expand("<cword>")<CR><CR>
    nmap <C-[>g :cs find g <C-R>=expand("<cword>")<CR><CR>
    nmap <C-[>c :cs find c <C-R>=expand("<cword>")<CR><CR>
    nmap <C-[>t :cs find t <C-R>=expand("<cword>")<CR><CR>
    nmap <C-[>e :cs find e <C-R>=expand("<cword>")<CR><CR>
    nmap <C-[>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
    nmap <C-[>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
    nmap <C-[>d :cs find d <C-R>=expand("<cword>")<CR><CR>
endif

"=============== plug-in start  ====================

" Tabbar
" 设置标签栏行数，0：隐藏顶部标签栏
set showtabline=2
" 设置窗口显示列数
" set columns=80
let g:Tb_MaxSize = 2
let g:Tb_TabWrap = 1
let g:Tb_MoreThanOne = 2
"let g:Tb_DBG_LVL=10
let Tb_cTabSwitchWindows=0
let g:Tb_ModSelTarget = 1
let g:Tb_ForceSyntaxEnable = 1
hi Tb_Normal guifg=white ctermfg=white
hi Tb_Changed guifg=green ctermfg=green
hi Tb_VisibleNormal ctermbg=252 ctermfg=235
hi Tb_VisibleChanged guifg=green ctermbg=252 ctermfg=white

" Tagbar
let g:tagbar_left=1
let g:tagbar_width=30
let g:tagbar_autofocus = 1
let g:tagbar_sort = 0
let g:tagbar_compact = 1
" tag for coffee
if executable('coffeetags')
  let g:tagbar_type_coffee = {
        \ 'ctagsbin' : 'coffeetags',
        \ 'ctagsargs' : '',
        \ 'kinds' : [
        \ 'f:functions',
        \ 'o:object',
        \ ],
        \ 'sro' : ".",
        \ 'kind2scope' : {
        \ 'f' : 'object',
        \ 'o' : 'object',
        \ }
        \ }

  let g:tagbar_type_markdown = {
    \ 'ctagstype' : 'markdown',
    \ 'sort' : 0,
    \ 'kinds' : [
        \ 'h:sections'
    \ ]
    \ }
endif
nmap <F5> :TagbarToggle<cr>


" Nerd Tree
""当NERDTree为剩下的唯一窗口时自动关闭
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
""修改树的显示图标
let g:NERDTreeDirArrowExpandable = '►'
let g:NERDTreeDirArrowCollapsible = '▼'
let NERDTreeAutoCenter=1
let NERDChristmasTree=0
let NERDTreeChDirMode=2
let NERDTreeShowLineNumbers=1
let NERDTreeShowBookmarks=1
let NERDTreeShowHidden=0
let NERDTreeWinSize=30
let NERDTreeWinPos = "right"
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ 'Ignored'   : '☒',
    \ "Unknown"   : "?"
    \ }
nmap <F6> :NERDTreeToggle<cr>

" echofunc
" 使用echofunc 需要tags文件，使用"ctags -R --fields=+lS"创建
" let g:EchoFuncShowOnStatus=1
"let g:EchoFuncKeyPrev='<C-b>'
"let g:EchoFuncKeyNext='<C-d>'
"let g:EchoFuncEnabled=0
"nnoremap <F4> :call EchoFuncToggle()<cr>


" powerline
let g:Powline_symbols='fancy'



" fold #if...#else...#endif constructs
" https://stackoverflow.com/questions/14606233/how-to-fold-if-endif-but-skip-in-between
set foldmethod=manual
let g:FoldMethodFuncIndex=1
function! FoldMethodFuncToggle()
	if g:FoldMethodFuncIndex == 0
		set foldmethod=manual
		echo "foldmethod: manual"
		let g:FoldMethodFuncIndex=1
	elseif  g:FoldMethodFuncIndex == 1
		set foldmethod=syntax
		echo "foldmethod: syntax"
		let g:FoldMethodFuncIndex=0
	endif
endfunction


nnoremap <F7> :call FoldMethodFuncToggle()<CR>
" 已经将这段代码移到~/usr/share/vim/vim81/syntax/c.vim 中,写在这里不会生效。
" 参考：
" https://stackoverflow.com/questions/14606233/how-to-fold-if-endif-but-skip-in-between?answertab=active#tab-top
" https://groups.google.com/forum/#!topic/vim_use/Se0iMYW2ywc
" https://vim.fandom.com/wiki/Syntax_folding_of_Vim_scripts
"
"syn region IfFoldContainer
"    \ start="^\s*#\s*if\(n\?def\)\?\>"
"    \ end="#\s*endif\>"
"    \ skip=+"\%(\\"\|[^"]\)\{-}\\\@<!"\|'[^']\{-}'\|'\\''\|//.*+
"    \ transparent
"    \ keepend extend
"    \ containedin=NONE
"    \ contains=SynFoldIf,SynFoldElif,SynFoldElse
"syn region SynFoldIf
"    \ start="^\s*#\s*if\(n\?def\)\?\>"
"    \ end="^\s*#\s*el\(se\|if\)\>"ms=s-1,me=s-1
"    \ skip=+"\%(\\"\|[^"]\)\{-}\\\@<!"\|'[^']\{-}'\|'\\''\|//.*+
"    \ fold transparent
"    \ keepend
"    \ contained
"    \ nextgroup=SynFoldElif,SynFoldElse
"    \ contains=TOP
"syn region SynFoldElif
"    \ start="^\s*#\s*elif\>"
"    \ end="^\s*#\s*el\(se\|if\)\>"ms=s-1,me=s-1
"    \ skip=+"\%(\\"\|[^"]\)\{-}\\\@<!"\|'[^']\{-}'\|'\\''\|//.*+
"    \ fold transparent
"    \ keepend
"    \ contained
"    \ nextgroup=SynFoldElse
"    \ contains=TOP
"syn region SynFoldElse
"    \ start="^\s*#\s*else\>"
"    \ end="^\s*#\s*endif\>"
"    \ skip=+"\%(\\"\|[^"]\)\{-}\\\@<!"\|'[^']\{-}'\|'\\''\|//.*+
"    \ fold transparent
"    \ keepend
"    \ contained
"    \ contains=TOP
"
"	另一种实现，但是似乎有点问题
"au FileType h,c,cpp syn region zhouzmFoldIf1 start="^\s*#if" end="^\s*#endif" fold transparent extend

"===============  plug-in end   ====================
nnoremap tr :let a=expand("<cword>")<Bar>exec '!translate ' .a<CR>

"set tags+=~/.vim/systags

